ABC248 D - Range Count Query
https://atcoder.jp/contests/abc248/tasks/abc248_d
提出
code: python
from collections import defaultdict
n = int(input())
# 3 1 4 1 5
a = list(map(int, input().split()))
q = int(input())
lrx = list(map(int, input().split())) for _ in range(q)
# indexと数字の辞書
d = defaultdict(list)
for i, num in enumerate(a):
dnum.append(i+1)
# print(d)
# defaultdict(<class 'list'>, {3: 1, 1: 2, 4, 4: 3, 5: 5})
for l, r, x in lrx:
target = dx
ans = 0
for t in target:
if t >= l and t <= r:
ans += 1
print(ans)
解答
code: python
from collections import defaultdict
from bisect import bisect_left, bisect_right
n = int(input())
# 3 1 4 1 5
a = list(map(int, input().split()))
q = int(input())
lrx = list(map(int, input().split())) for _ in range(q)
# indexと数字の辞書
d = defaultdict(list)
for i, num in enumerate(a):
dnum.append(i+1)
# print(d)
# defaultdict(<class 'list'>, {3: 1, 1: 2, 4, 4: 3, 5: 5})
for l, r, x in lrx:
target = dx
print(bisect_right(target, r) - bisect_left(target, l))
テーマ
#bisect
メモ
【AtCoder解説】PythonでABC248のA,B,C,D,E,F問題を制する!
提出
code: python
from collections import defaultdict
import bisect
n = int(input())
a = list(map(int, input().split()))
q = int(input())
queries = list(map(int, input().split())) for _ in range(q)
# 3 1 4 1 5
# {1: 2, 4, 2: 0, 3: 1, 4: 3, 5: 5}
# 短調増加
# 2, 5, 9, 87
d = defaultdict(list)
for i, v in enumerate(a):
dv.append(i+1)
for query in queries:
l, r, x = query
t = dx
mi = bisect.bisect_left(t, l)
ma = bisect.bisect_right(t, r)
print(max(0, ma - mi))